home *** CD-ROM | disk | FTP | other *** search
/ Aminet 40 / Aminet 40 (2000)(Schatztruhe)[!][Dec 2000].iso / Aminet / util / cdity / ModeProSrc.lha / ModePro.h < prev    next >
C/C++ Source or Header  |  2000-09-17  |  10KB  |  342 lines

  1. #define INTUI_V36_NAMES_ONLY
  2. #define __USE_SYSBASE
  3.  
  4. #include <dos.h>
  5.  
  6. #include <stdio.h>
  7. #include <string.h>
  8. #include <math.h>
  9.  
  10. #include <dos/dosextens.h>
  11.  
  12. #include <exec/types.h>
  13. #include <exec/ports.h>
  14. #include <exec/memory.h>
  15.  
  16. #include <graphics/gfxmacros.h>
  17. #include <graphics/text.h>
  18. #include <graphics/modeid.h>
  19.  
  20. #include <intuition/gadgetclass.h>
  21. #include <intuition/intuition.h>
  22.  
  23. #include <libraries/asl.h>
  24. #include <libraries/gadtools.h>
  25. #include <libraries/iffparse.h>
  26.  
  27. #include <prefs/palette.h>
  28.  
  29. #include <proto/asl.h>
  30. #include <proto/commodities.h>
  31. #include <proto/diskfont.h>
  32. #include <proto/dos.h>
  33. #include <proto/exec.h>
  34. #include <proto/gadtools.h>
  35. #include <proto/graphics.h>
  36. #include <proto/icon.h>
  37. #include <proto/iffparse.h>
  38. #include <proto/intuition.h>
  39. #include <proto/locale.h>
  40. #include <proto/utility.h>
  41.  
  42. #include <clib/extras_protos.h>
  43. #include <clib/extras/exec_protos.h>
  44.  
  45. #define MPVER "4.64"
  46. #define VER 4
  47. #define REV 64
  48.  
  49. #define REG register
  50. #define ASM __asm
  51.  
  52. #define REQDEFHEIGHT (174-16)
  53.  
  54. #define SA_ModeProNode (TAG_USER | 1<<30 | 0xBADC0DE ) 
  55.  
  56. /**** GENERAL STUFF ****/
  57. #define p(x) //printf(x);
  58.  
  59. #define FUNCCAST unsigned long (* )()
  60. #define LIBCAST  struct Library *
  61.  
  62. #define DRIPENS 12
  63.  
  64. #define SEMAPHORES 6
  65.  
  66. // Add PrefsLeft, .Top  Active List & Node etc...
  67.  
  68. #define NUM_LISTS 4
  69.  
  70. struct MPSem
  71. {
  72.   struct SignalSemaphore  SharedSem,  // Shared sem to keep struct valid.
  73.                           PrefsSem,   // Obtained by MPPrefs, only allows one Prefs open
  74.                           ListSem,    // shared, allows shared read access to the PromotionLists
  75.                           NodeSem,    // exclusive, allows exclusive r/w access to the PromotionLists 
  76.                           OpenListSem,// allows access to the OpenList
  77.                           PortSem;    // allows access to the ports
  78.   /* NOTE TO BRAIN: NEVER EVER EVER ADD Anything between PortSem AND Version!!!!! */
  79.   ULONG  Version,
  80.          Revision;
  81.   STRPTR HotKey;
  82.   BOOL   Enabled,
  83.          EnabledNLM,
  84.          CatchPubScreens,
  85.          CatchScreens,
  86.          CatchPopup;
  87.   struct MsgPort  *DaemonPort,
  88.                   *PrefsPort;
  89.   struct List OpenList;
  90.   struct List PromotionList[NUM_LISTS];
  91.   ULONG  Debug;     // Added in ver 4.6
  92.   ULONG  CenterAll; // Added in ver 4.8
  93.   BOOL   FirstPrefsOpen;
  94.   WORD   LeftEdge,TopEdge;
  95.   LONG   LVActive,
  96.          CurrentList;
  97.   WORD   WinWidth,WinHeight;
  98.   struct MsgPort PrefsToDoPort;   // v4.27 // Things that the prefs editor must do (ForcedEdit Msgs for ex)//  (4.63.1)
  99.   struct PalettePrefs PPrefs;
  100.   BOOL   PPrefsSet;
  101. /*  struct MsgPort OptionPort;
  102.   struct SignalSemaphore OptionSem;*/
  103. };
  104.  
  105. #define ForcedEditPort PrefsToDoPort//                                                                 (4.63.2)
  106.  
  107.  
  108. /* MPSem.PromotionList[PL_?]  &  DefaultNode.Type */
  109. #define PL_PROGRAMNAMES   0
  110. #define PL_SCREENNAMES    1
  111. #define PL_SCREENMODES    2
  112. #define PL_PUBLICSCREENS  3
  113.  
  114. /* Newstyle names */
  115. #define MPSEM_PLIST_PROGRAMNAMES    0
  116. #define MPSEM_PLIST_SCREENNAMES     1
  117. #define MPSEM_PLIST_SCREENMODES     2
  118. #define MPSEM_PLIST_PUBLICSCREENS   3
  119. #define MPSEM_PLIST_MAX             3
  120.  
  121. /*******************************/ 
  122. /*  Messages between MP & MPP  */
  123.  
  124. struct MPMessage
  125. {
  126.   struct Message mp_Message;
  127.   ULONG Command,Code;
  128.   APTR Data;
  129. };
  130.  
  131. struct MPScreenMessage
  132. {
  133.   struct Message mp_Message;
  134.   ULONG Command,Code;
  135.   struct DefaultNode *DN;
  136.   struct OpenNode *ON;
  137. };
  138.  
  139. /* arrows indicate which ways messages can travel */
  140. #define MP_QUIT            1  // Mp <-  MPP
  141. #define MP_PREFSTOFRONT    2  // MP  -> MPP
  142. #define MP_PREFSCLOSE      3  // MP  -> MPP
  143. #define MP_NEWNODE         4  // MP  -> MPP, Code = listnumber; Data = Node
  144. #define MP_REMNODE         5  // A node was removed & freed, used to be a &Data, NOT USED
  145. #define MP_LISTSTATUS      6  // MP  -> MPP,
  146. #define MP_REFRESH         7  // MP  -> MPP, currently for refreshing Menu settings from MPSem
  147. #define MP_CDTYSTATUS      8  // NOT USED.
  148.  
  149. #define MP_SAVE           10  // MP  -> MPP, Instruct MPPrefs to save.
  150. #define MP_SHOWGUI        11  // Patch -> MP, show gui, Code = Success
  151. //??????????????????????????????????
  152.  
  153. #define MP_PUBSCREEN      12  // Patch -> MP, open a public screen.
  154.                               // Code 0:Open/Lock 1:Close/Unlock
  155.                               // Data is Name 
  156.  
  157. #define MP_SCREENOPENED   13  // Patch -> MP, Data = OpenNode * 
  158. #define MP_SCREENCLOSING  14  // Patch -> MP, Data = OpenNode *
  159.  
  160. // ToDo messages
  161. #define MPTD_IMPORT         15
  162. #define MPTD_FORCEDEDIT     9 
  163. #define MP_FORCEDEDIT       MPTD_FORCEDEDIT 
  164.                               // MP  -> MPP, Sets prefs to forced edit mode. Data is DNode ptr. 
  165.                               // Only sent to MPSem->PrefsToDoPort
  166.                               // Prefs ReplyMsg Code values: 
  167.                               // 0 - Cancel 1-Permant Ignore, 2-Use&Delete 3-Save&Use
  168.  
  169. // MP_LISTSTATUS Codes
  170. #define MPLS_NORMAL        0  // ModePro is in normal mode.  ModeProPrefs can access lists
  171. #define MPLS_UPDATING      1  // ModePro is in updating the list(s).  ModeProPrefs cannot access lists
  172.  
  173. // MP_CDTYSTATUS Codes
  174. #define MPCS_DISABLED    0
  175. #define MPCS_ENABLED     1
  176.  
  177. // MP_FORCEDEDIT return Codes
  178. #define MPFE_CANCEL      0
  179. #define MPFE_NEVER       1
  180. #define MPFE_USEDELETE   2
  181. #define MPFE_SAVEUSE     3
  182.  
  183. /*** STRUCTURES ***/
  184.  
  185.  
  186.  
  187.  
  188. /* Data Nodes for OpenNode.DataList */
  189. struct BackdropNode
  190. {
  191.   struct Node bn_Node; //ln_Type = MPDN_Backdrop
  192.   struct Window *bn_Window;
  193.   struct DTObject *bn_DTObject;
  194. };
  195.  
  196. struct QuickPicNode
  197. {
  198.   struct Node qn_Node; //ln_Type = MPDN_QuickPic
  199.   struct Window *qn_Window;
  200. };
  201.  
  202.  
  203.  
  204. struct RGB
  205. {
  206.   ULONG Red,Green,Blue;
  207. };
  208.  
  209. struct DefaultNode
  210. {
  211.   struct  Node Def_Node; // 14
  212.   UWORD   Type;  // see PL_types  //2
  213.   ULONG   ModeSelect; //4
  214.   ULONG   ModeID; //4
  215.   WORD    Width, //2
  216.           Height; //2
  217.   ULONG   OverscanType;//4
  218.   UBYTE   AutoScroll;//1
  219.   UBYTE   Look3D; //1
  220.   ULONG   Flags; //4
  221.   WORD    Pens[DRIPENS]; //24
  222.   UBYTE   FontType; //1 + 1
  223.   struct  TTextAttr Font; //12
  224.   ULONG   PubOptions; //4
  225.   UBYTE   *PubName; //4
  226.   UWORD   Depth; //2
  227.   UBYTE   *LockedPens; //4
  228.   UBYTE   *HotKey;//4
  229.   ULONG   OrigDisplayID; //4
  230.   UBYTE   ODFlags; //1
  231.   UBYTE   CenterFlags; //1
  232.   LONG    Colors; //4
  233.   struct  RGB *Palette; //4
  234.   BYTE    BackdropType; //1
  235.   BYTE    BackdropFlags; //1
  236.   STRPTR  BackdropFile; //4
  237.   struct  RGB BackdropRGB; //12
  238.   
  239. }; //126
  240.  
  241. /* DefaultNode.ModeSelect */
  242. #define MS_DONT_PROMOTE         0
  243. #define MS_PROMOTE_MONITOR      1
  244. #define MS_PROMOTE_SCREENMODE   2
  245. #define MS_PROMOTE_REQUESTER    3
  246. #define MS_PROMOTE_BEST_MODE    4
  247.  
  248. #define MS_PROMOTE_MAX          4
  249.  
  250.  
  251.  
  252.  
  253.  
  254. /* DefaultNode.Flags */
  255. #define INTERLEAVE        (1<<0)
  256. #define CENTER            (1<<2)  // obsolete as of 4.6
  257. #define FIXASPECT         (1<<3)  // for the font
  258. #define DEPTH             (1<<4) 
  259. #define SHAREPENS         (1<<5)
  260. #define SCRHOTKEY         (1<<6)
  261. /* newstyle names */
  262. #define DNF_PALETTE       (1<<7)
  263. #define DNF_FORCEPLANAR   (1<<8) 
  264. #define DNF_IGNORE_WH     (1<<9)  // Ignore Width & Height settings.  (4.19)
  265. #define DNF_BLANK_BORDER  (1<<10)
  266. #define DNF_BEHIND        (1<<11)
  267. #define DNF_3D_DEFAULT    (1<<12) // Use system defaults for 3d pens
  268. #define DNF_NEVER_PROMOTE (1<<13)
  269. #define DNF_UNAPPROVED    (1<<14)
  270.  
  271. #define DNODE_OSCANTYPE_MIN 1
  272. #define DNODE_OSCANTYPE_MAX 4
  273.  
  274. #define BF_ON      (1<<0) /* obsolete */
  275. #define BF_CENTER  (1<<1)
  276. #define BF_TILE    (1<<2)
  277.  
  278. /* DNode.BackdropType */
  279. #define DNODE_BACKDROPTYPE_OFF    0
  280. #define DNODE_BACKDROPTYPE_IMAGE  1
  281. #define DNODE_BACKDROPTYPE_COLOR  2
  282. #define DNODE_BACKDROPTYPE_MAX    2
  283.  
  284. /* DefaultNode.FontType */
  285. #define SFONT_PROG      0
  286. #define SFONT_SYS       1
  287. #define SFONT_MP        2
  288.  
  289.  
  290. /* The OpenNode structure is allocated when certain screens 
  291.  *   are promoted and require certain resources to be allocated 
  292.  ***************************************************************/
  293.  
  294. #define MAX_ONPENS 256
  295.  
  296. struct OpenNode
  297. {
  298.   struct Node on_Node; // 14
  299.   struct Screen *Screen; // 4
  300.   ULONG  Flags; // 4
  301.   struct TTextAttr TA; // 12
  302.   UBYTE  PubName[MAXPUBSCREENNAME+1]; // 140
  303.   CxObj  *Cx; // 4
  304.   UBYTE  *HotKey; // 4
  305.   UBYTE  *ScreenTitle; // 4
  306.   struct BitMap *BitMap; // 4
  307.   UBYTE  ObtainedPens[MAX_ONPENS]; // 256
  308.   struct DefaultNode *DN;  // 4 Copy of the defaultnode that promoted this screen.
  309.   struct Screen *PubScreenLock;
  310. /*  struct MsgPort MPort;
  311.   struct SignalSemaphore SS;
  312.   struct List *MPData;*/
  313. };
  314.  
  315. /* OpenNode.Flags */
  316. #define ON_FONT         (1<<0)  /* If the font was specified by MP .TA is set */
  317. #define ON_PUBLIC       (1<<1)  /* Is a public screen */
  318. #define ON_OPEN         (1<<2)  /* This flag is set until the screen owner calls CloseScreen() */ 
  319. #define ON_WORKBENCH    (1<<4)  /* This OpenNode belongs to the Workbench screen. */
  320. #define ON_SCANNED      (1<<7)  /* When MP knows that this node exists, it sets this bit */
  321. #define ON_CLOSEME      (1<<8)  /* Try to close this screens */
  322.  
  323. // 4.53 (UNUSED) #define ON_HOTKEY       (1<<3)  /* This OpenNode has a hotkey assigned to it, .CX .HotKey .ScreenTitle are set */  
  324. // 4.53 (UNUSED) #define ON_BITMAP       (1<<5)  /* If forced planar .BitMap is set */
  325. // 4.53 (UNUSED) #define ON_QUICKWIN     (1<<6)  /* Never used! Has a quickwindow ??, .QuickWindow is set */
  326.  
  327. //833 1072
  328.  
  329.  
  330.  
  331.  
  332.  
  333. #define ALL_MODES (~MONITOR_ID_MASK)
  334. #define BADMODES (DIPF_IS_HAM | DIPF_IS_DUALPF | DIPF_IS_PF2PRI | DIPF_IS_EXTRAHALFBRITE)
  335.  
  336. BOOL    LoadFile(struct List *List, UBYTE *fname);
  337. void    FreeDNode(struct DefaultNode *dn);
  338. void    FreeDefList(struct List *);
  339. void    FreeAllDefLists(struct List *);
  340. struct DefaultNode *AllocDefaultNode(STRPTR Name);
  341. struct DefaultNode *DupDNode(struct DefaultNode *Src);
  342.